﻿package com.eitb.imagenes{
	import flash.geom.*;
	import com.eitb.geom.*;

	public class ImagenAjuste {

		/**
		* Ajusta una imagen a un rectangulo de forma que se escale sin deformarse. Devuelve un rectangulo con las medidas que debería tener la imagen.
		*/
		public function getImagenFit(bSize:Point, where:Rectangle):Rectangle {
			var marco:Number=0;
			var rectangle:Rectangle = new Rectangle();

			rectangle.width=where.width;
			rectangle.height = bSize.y * (where.width / bSize.x);

			if (rectangle.height>where.height) {
				rectangle.height=where.height;
				rectangle.width = rectangle.width * (where.height / (bSize.y * (where.width / bSize.x)));
			}

			rectangle.height-=marco;
			rectangle.width-=marco;

			rectangle.x = where.x + (where.width > rectangle.width ? where.width - rectangle.width : rectangle.width - where.width) / 2;
			rectangle.y = where.y + (where.height > rectangle.height ? where.height - rectangle.height : rectangle.height - where.height ) / 2;

			return rectangle;
		}

		/**
		* Ajusta una imagen a un rectangulo de forma que se escale sin deformarse y ocupe todo el area del rectangulo (aunque la imagen se recorte). Devuelve un rectangulo con las medidas que debería tener la imagen.
		*/
		public function getImagenCrop(bSize:Point, where:Rectangle):Rectangle {
			var center:Point;
			var marco:Number=0;
			var rectangle:Rectangle = new Rectangle();

			rectangle.width=where.width;
			rectangle.height = bSize.y * (where.width / bSize.x);

			if (rectangle.height>where.height) {
				rectangle.height=where.height;
				rectangle.width = rectangle.width * (where.height / (bSize.y * (where.width / bSize.x)));
			}

			//            rectangle.x = where.x + (where.width > rectangle.width ? where.width - rectangle.width : rectangle.width - where.width) / 2;
			//rectangle.y = where.y + (where.height > rectangle.height ? where.height - rectangle.height : rectangle.height - where.height ) / 2;

			if (where.width!=rectangle.width) {
				marco=rectangle.width-where.width;
			} else {
				marco=rectangle.height-where.height;

			}
			rectangle.height-=marco;
			rectangle.width-=marco;

			center=this.getImagenCenter(new Size(rectangle.width,rectangle.height),new Size(where.width,where.height));

			rectangle.x=center.x;
			rectangle.y=center.y;

			return rectangle;
		}

		/**
		* Devuelve la posición x e y que debería tener la imagen para encontrarse en el centro.
		*/
		public function getImagenCenter(image:Size, where:Size):Point {
			return new Point((where.width - image.width) /2, (where.height - image.height) /2);
		}
	}
}